package com.example.demo.common;

import org.springframework.util.DigestUtils;
import org.springframework.util.StringUtils;

import java.nio.charset.StandardCharsets;
import java.util.UUID;



public class PasswordUtils {


    /*
    * 明文生成的密码
    * */
    //1.加盐并生成密码
    public static String encrypt(String password){
        //得到盐值
        String salt = UUID.randomUUID().toString().replace("-","");
        //生成加盐之后的密码
        String saltPassword = DigestUtils.md5DigestAsHex((salt+password).getBytes());
        //生成最终的密码(保存到数据库中的密码)    [自己约定的格式] 32位盐值$32位加盐之后的密码
        String finalPassword = salt + "$" + saltPassword;
        return finalPassword;
    }

    /*
    * 根据盐值生成一个密码
    * 生成最终密码
    *
    * */
    //2.生成加盐的密码（方法1的重载）
    public static String encrypt(String password,String salt){
        //1.生成加盐之后的密码
        String saltPassword = DigestUtils.md5DigestAsHex((salt+password).getBytes());
        //2.生成最终的密码
        String finalPassword = salt + "$" + saltPassword;
        return finalPassword;
    }


    /**
     * 用户输入的明文密码
     * 数据库保存的最终密码
     *
     * */
    //3.验证密码
    public static boolean check(String inputPassword,String finalPassword){
        if (StringUtils.hasLength(inputPassword) && StringUtils.hasLength(finalPassword)
                                                && finalPassword.length()==65){
            //1.得到盐值
            String salt = finalPassword.split("\\$")[0];
            //2.将当前用户输入的密码使用盐值加密生成对比的密码
            String confirPassword = PasswordUtils.encrypt(inputPassword,salt);
            //3.对比两个密码是否相同
            return confirPassword.equals(finalPassword);
        }
        return false;
    }






    public static void main(String[] args) {
        String password = "123456";
        String finalPassword = PasswordUtils.encrypt(password);
        System.out.println("加密："+finalPassword);

        String inputPassword1 = "12345";
        System.out.println(inputPassword1+" "+PasswordUtils.check(inputPassword1,finalPassword));
        String inputPassword2 = "123456";
        System.out.println(inputPassword2+" "+PasswordUtils.check(inputPassword2,finalPassword));

    }
}













